using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using demo.Tool;

namespace demo
{
    static class Program
    {

        
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                // 设置全局异常处理
                SetupGlobalExceptionHandling();
                
                operateLog.WriteLog("应用程序启动开始");
                
                // 清理过期日志文件
                operateLog.WriteLog("开始清理过期日志文件");
                try
                {
                    operateLog.DeleteLog();
                }
                catch (Exception logEx)
                {
                    operateLog.WriteLog("清理过期日志文件时发生错误：" + logEx.Message);
                }
                
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                
                operateLog.WriteLog("初始化本地数据库开始");
                // 初始化本地数据库
                Tool.LocalDbHelper.Initialize();
                operateLog.WriteLog("初始化本地数据库完成");
                
                operateLog.WriteLog("初始化定时任务数据处理器开始");
                // 初始化定时任务数据处理器
                TimerTaskDataProcessor.Initialize();
                operateLog.WriteLog("初始化定时任务数据处理器完成");
                
                operateLog.WriteLog("创建登录窗体开始");
                // 使用单例模式创建并初始化登录窗体
                var loginForm = Login.Instance;
                loginForm.InitializeComponents();
                operateLog.WriteLog("创建登录窗体完成");
                
                operateLog.WriteLog("启动应用程序主循环");
                Application.Run(loginForm);
                
                operateLog.WriteLog("应用程序正常退出");
            }
            catch (Exception ex)
            {
                operateLog.WriteLog("应用程序启动时发生严重错误：" + ex.Message);
                operateLog.WriteLog("错误堆栈：" + ex.StackTrace);
                MessageBox.Show("应用程序启动失败：" + ex.Message, "严重错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        /// <summary>
        /// 设置全局异常处理
        /// </summary>
        private static void SetupGlobalExceptionHandling()
        {
            // 设置未处理异常的处理模式
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            
            // 处理UI线程异常
            Application.ThreadException += Application_ThreadException;
            
            // 处理非UI线程异常
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            
            operateLog.WriteLog("全局异常处理机制已设置");
        }
        
        /// <summary>
        /// 处理UI线程异常
        /// </summary>
        private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            try
            {
                operateLog.WriteLog("UI线程异常：" + e.Exception.Message);
                operateLog.WriteLog("异常类型：" + e.Exception.GetType().Name);
                operateLog.WriteLog("异常堆栈：" + e.Exception.StackTrace);
            }
            catch
            {
                // 如果日志记录失败，静默处理
            }
            // 不再弹出任何对话框，只记录日志
        }
        
        /// <summary>
        /// 处理非UI线程异常
        /// </summary>
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            try
            {
                operateLog.WriteLog("未处理异常: " + e.ExceptionObject.ToString());
            }
            catch
            {
                // 如果日志记录失败，静默处理
            }
            // 不再弹出任何对话框，只记录日志
        }
        

    }
}
